Setting
Function biar gak perlu ganti backslash
(\) jadi slash (/).
path <- function() gsub ( "\\\\", "/", readClipboard () )
#Copy path, Panggil function di console
#Copy r path, paste ke var yang diinginkan
Set Working Directory
Function biar gak perlu repot buat
install("") atau load() package.
# -=( Install & Load Package Function )=-
install_load <- function (package1, ...) {
# convert arguments to vector
packages <- c(package1, ...)
# start loop to determine if each package is installed
for(package in packages){
# if package is installed locally, load
if(package %in% rownames(installed.packages()))
do.call('library', list(package))
# if package is not installed locally, download, then load
else {
install.packages(package)
do.call("library", list(package))
}
}
}
Function position_stack_and_nudge
# -=( GGPLOT POSITION FUNCTION )=-
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
position_stack_and_nudge <- function(x = 0, y = 0, vjust = 1, reverse = FALSE) {
ggproto(NULL, PositionStackAndNudge,
x = x,
y = y,
vjust = vjust,
reverse = reverse
)
}
#' @rdname ggplot2-ggproto
#' @format NULL
#' @usage NULL
#' @noRd
PositionStackAndNudge <- ggproto("PositionStackAndNudge", PositionStack,
x = 0,
y = 0,
setup_params = function(self, data) {
c(
list(x = self$x, y = self$y),
ggproto_parent(PositionStack, self)$setup_params(data)
)
},
compute_layer = function(self, data, params, panel) {
# operate on the stacked positions (updated in August 2020)
data = ggproto_parent(PositionStack, self)$compute_layer(data, params, panel)
x_orig <- data$x
y_orig <- data$y
# transform only the dimensions for which non-zero nudging is requested
if (any(params$x != 0)) {
if (any(params$y != 0)) {
data <- transform_position(data, function(x) x + params$x, function(y) y + params$y)
} else {
data <- transform_position(data, function(x) x + params$x, NULL)
}
} else if (any(params$y != 0)) {
data <- transform_position(data, function(x) x, function(y) y + params$y)
}
data$nudge_x <- data$x
data$nudge_y <- data$y
data$x <- x_orig
data$y <- y_orig
data
},
compute_panel = function(self, data, params, scales) {
ggproto_parent(PositionStack, self)$compute_panel(data, params, scales)
}
)
Theme Pie Chart.
install_load('ggrepel')
# -=( Label Pie Chart )=-
lab.p <- list(
geom_label_repel( aes(label = paste0(perc,"(",n,")")),
position = position_stack_and_nudge(vjust = 0.5, x = 0.65),
direction='y', fontface = 'bold', color = 'white',
box.padding = unit(0.35, "lines"),
point.padding = unit(0.5, "lines"), segment.color = '#454545',
size=10)
)
# -=( THEME Pie Chart )=-
theme.p <- list(
theme_void() ,
theme(
text = element_text(size = 36),
axis.text.y = element_text(vjust = .5, face = "bold"),
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5) )
)
Function Pie Chart
# -=( Pie Chart FUNCTION )=-
plot.p <- function(dt, title = "Pice Chart"){
install_load("ggplot2", "dplyr", "viridis", "ggrepel", "tidyverse",'scales')
#DATA FRAME
df <- data.frame(ket = dt) %>%
#Frequency
group_by(ket) %>%
count() %>%
ungroup() %>%
mutate(perc = percent(n/sum(n), accuracy = 0.1, trim = FALSE))
#PIE CHART
sp <- ggplot(data=df, aes(x = "", y = n, fill = ket)) +
geom_col(width = 1, color = "white", linewidth = 2,
position = position_stack()) +
coord_polar(theta = "y") +
scale_alpha_manual(values = c("0"=0, "1"=1, "2"=0.7), guide=F) +
scale_x_discrete(breaks = NULL) +
scale_y_continuous(breaks = NULL) +
labs(title = title) + #Title
#COLORING
scale_fill_viridis(alpha = 0.75, #Opacity
begin = 0.2, #Color pallte scale begins
end = 0.5, #Color pallte scale ends
direction = -1, #Flip color scale
discrete = T, #Discrete Value
option = "D") + #Color Palette
theme.p + #Theme
xlab("") + ylab("") + lab.p #Labels
return(sp)
}
Tentang Data
Data kelompok kami merupakan data hasil web scraping dari laptopmedia.com
dengan menggunakan extension web scraper
dari chrome. Data ini memiliki 7 peubah yakni : Name (Nama
laptop), Price (Harga), CPU, GPU,
RAM, Display (layar), dan
Storage.
Data tersebut perlu dibersihkan dan dimanage sehingga dapat di olah pada analisis selanjutnya.
Data input
install_load('readxl','dplyr','kableExtra')
## Warning: package 'dplyr' was built under R version 4.2.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
data <- read_xlsx("data.xlsx", sheet="Laptop")
data <- data[,-c(1,2)]
cat("Jumlah Kolom:", ncol(data), "\n")
## Jumlah Kolom: 7
cat("Jumlah Baris:", nrow(data), "\n")
## Jumlah Baris: 10000
kable(head(data)) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE)
| Name | Price | CPU | RAM | GPU | Display | Storage |
|---|---|---|---|---|---|---|
| Lenovo ThinkPad T14 Gen 2 | $146999 | AMD Ryzen 7 5850U | 20GB RAM | AMD Radeon RX Vega 8 (R4000/5000, 15W) | 14.0”, Full HD (1920 x 1080), IPS | 2000GB SSD |
| HP 17 | $111900 | Intel Core i5-1335U | 16GB RAM | Intel Iris Xe Graphics G7 (80EU) | 17.3”, Full HD (1920 x 1080), IPS | 1000GB HDD |
| Acer Predator Triton 300 | $204900 | Intel Core i7-11800H | 64GB RAM | NVIDIA GeForce RTX 3060 (Laptop, 105W) | 15.6”, Full HD (1920 x 1080), 144 Hz, IPS | 4000GB SSD |
| ASUS Vivobook 17X | $96999 | AMD Ryzen 7 5800H | 40GB RAM | AMD Radeon RX Vega 8 (R4000/5000, 35/45W) | 17.3”, Full HD (1920 x 1080), IPS | 2000GB SSD |
| HP 17 | $71299 | Intel Core i5-1335U | 12GB RAM | Intel Iris Xe Graphics G7 (80EU) | 17.3”, Full HD (1920 x 1080), IPS | 1000GB SSD |
| Dell Vostro 7620 | $157900 | Intel Core i7-12700H | 24GB RAM | NVIDIA GeForce RTX 3050 (Laptop) | 16.0”, WUXGA (1920 x 1200), IPS | 512GB SSD |
Cek Missing Data
Penting untuk melihat ada tidaknya missing data.
# Mencari indeks baris dan kolom yang mengandung NA
na.idx <- which(is.na(data), arr.ind = TRUE)
cat("Banyaknya data NA : ", nrow(na.idx))
## Banyaknya data NA : 9
# Menampilkan data raw dengan baris dan kolom yang mengandung NA
install_load('kableExtra','dplyr','DT')
## Warning: package 'DT' was built under R version 4.2.3
#Menampilkan tabel
kable(data[ # Subsetting
unique(na.idx[, 1]), # Vektor indeks baris yang mengandung NA
unique(na.idx[, 2]) ] # Vektor indeks kolom yang mengandung NA
# Style Tabel
) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE)
| Display | Storage |
|---|---|
| NA | 256GB SSD |
| NA | 256GB SSD |
| NA | 512GB SSD |
| NA | 1000GB HDD |
| NA | 256GB SSD |
| NA | 64GB SSD |
| 13.3”, Full HD (1920 x 1080), IPS | NA |
| 14.0”, HD (1366 x 768), TN | NA |
| 11.6”, HD (1366 x 768), IPS | NA |
Hapus Data NA
Karena peubah diatas sulit untuk diduga maka kami putuskan untuk
menghapus data NA tersebut.
data <- data[ -unique(na.idx[, 1]), ]
cat("Jumlah Baris:", nrow(data), "\n")
## Jumlah Baris: 9991
1. Brand Classification
Klasifikasi brand ini diperlukan agar kita dapat melihat lebih jelas sebaran brand yang dijual pada e-commerce ini maupun untuk analisis selanjutnya.
# Install dan muat paket stringr jika belum diinstal
install_load('stringr')
## Warning: package 'stringr' was built under R version 4.2.3
# Daftar kata kunci merek
brands <- c(
"HP", "Hewlett-Packard", "Acer", "Dell", "Lenovo", "ASUS",
"MSI", "Alienware", "Apple", "LG", "Samsung", "Aorus", "Gigabyte",
"Razer", "Microsoft", "Panasonic", "Chuwi", "Toshiba", "Fusion5")
# Fungsi untuk menetapkan merek berdasarkan kata kunci
assign_brand <- function(data) {
for (brand_keywords in brands) {
if (any(str_detect(tolower(data), tolower(brand_keywords)))) {
return(brand_keywords[1]) # Ambil merek pertama yang cocok
}
}
return("Tidak Diketahui")
}
# Menambahkan kolom brand berdasarkan fungsi
data$Brand <- sapply(data$Name, assign_brand)
# Tampilkan hasil
kable(head(data)) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE)
| Name | Price | CPU | RAM | GPU | Display | Storage | Brand |
|---|---|---|---|---|---|---|---|
| Lenovo ThinkPad T14 Gen 2 | $146999 | AMD Ryzen 7 5850U | 20GB RAM | AMD Radeon RX Vega 8 (R4000/5000, 15W) | 14.0”, Full HD (1920 x 1080), IPS | 2000GB SSD | Lenovo |
| HP 17 | $111900 | Intel Core i5-1335U | 16GB RAM | Intel Iris Xe Graphics G7 (80EU) | 17.3”, Full HD (1920 x 1080), IPS | 1000GB HDD | HP |
| Acer Predator Triton 300 | $204900 | Intel Core i7-11800H | 64GB RAM | NVIDIA GeForce RTX 3060 (Laptop, 105W) | 15.6”, Full HD (1920 x 1080), 144 Hz, IPS | 4000GB SSD | Acer |
| ASUS Vivobook 17X | $96999 | AMD Ryzen 7 5800H | 40GB RAM | AMD Radeon RX Vega 8 (R4000/5000, 35/45W) | 17.3”, Full HD (1920 x 1080), IPS | 2000GB SSD | ASUS |
| HP 17 | $71299 | Intel Core i5-1335U | 12GB RAM | Intel Iris Xe Graphics G7 (80EU) | 17.3”, Full HD (1920 x 1080), IPS | 1000GB SSD | HP |
| Dell Vostro 7620 | $157900 | Intel Core i7-12700H | 24GB RAM | NVIDIA GeForce RTX 3050 (Laptop) | 16.0”, WUXGA (1920 x 1200), IPS | 512GB SSD | Dell |
a. Sebaran Brand Laptop
# Membuat bar chart persentase
ggplot(data = data %>% count(Brand) %>% # banyaknya laptop brand x
mutate(perc = round(n / sum(n) * 100)), #buat persentase
aes(x = reorder(Brand, -n), y = perc)) +
geom_bar(stat = "identity", fill='#2D99AE') +
geom_text(aes(label = prettyNum(n,big.mark = ",")
), vjust = -0.5, size = 7, col="orange4",
fontface = "bold") + # Tambahkan label
labs(x = "Brand", y = "Persentase (%)",
title = "Sebaran Brand Laptop") +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
scale_y_continuous(labels = scales::percent_format(scale = 1)) +
theme_minimal() + # Tambahkan tema minimal
theme(axis.text.x = element_text(angle = 45, hjust = 1,
margin = margin(b = 10)),
axis.text.y = element_text(vjust = .5, face = "bold",
margin = margin(l = 20)),
plot.title = element_text(hjust = 0.5, face = "bold"),
text = element_text(size = 30),
plot.subtitle = element_text(hjust = 0.5)
)
b. Brand to dummy variable
Singkat nya peubah Dummy memisahkan setiap kategori ke beberapa
kolom. Dengan isi 1 atau TRUE yang kategori
nya sesuai, dan 0 atau FALSE untuk kategori
lainnya. Seperti contoh gambar di atas.
Namun cara diatas sangat memakan waktu dan memakan memori. Untung nya
R dapat mengenali lebih advance yakni dengan tipe
variabel factor. Karena factor memiliki
level atau urutan nilai kategori yang bisa di ubah sesuka
hati. Seperti ini
factor(data$Brand, levels = c('HP','Acer',...)). Namun
untuk default nya, R mengurutkan berdasarkan
abjad.
Terdapat Fungsi relevel() yang digunakan dalam konteks
peubah dummy untuk menentukan referensi atau kategori dasar. Namun ini
hanya menggantikan posisi level 1, dengan ref
yang diberikan. Sisanya mengurut sesuai abjad.
Ketika membuat peubah dummy untuk variabel kategorikal dengan lebih dari dua kategori, R secara otomatis memilih satu kategori sebagai referensi dan yang lainnya sebagai peubah dummy. Referensi yang diubah dapat mempengaruhi hasil analisis regresi karena perubahan dalam perbandingan dengan referensi. Jadi, pemilihan referensi ini perlu diperhatikan dalam konteks analisis statistik.
Berikut beberapa pertimbangan untuk memilih referensi yang baik:
Interpretasi yang Jelas: Pilih kelompok referensi yang mudah diinterpretasikan. Ini akan membuat hasil analisis lebih mudah dipahami. Misalnya, jika Anda menganalisis jenis produk (A, B, C), mungkin produk yang paling umum atau biasa digunakan adalah pilihan yang baik untuk referensi.
Pentingnya Variabel: Pilih kelompok yang memiliki relevansi atau signifikansi tertentu dalam konteks analisis Anda sebagai referensi. Ini dapat membantu Anda memahami efek perbedaan antara kelompok tersebut dengan kelompok lain.
Eksplanasi Variabel Lain: Terkadang pemilihan referensi dapat memengaruhi hasil analisis. Misalnya, dalam analisis regresi logistik, referensi dapat mempengaruhi bagaimana koefisien variabel lain diinterpretasikan.
Kemudahan Analisis: Pilih kelompok referensi yang memudahkan perbandingan dengan kelompok lainnya. Ini dapat membuat hasil analisis lebih intuitif dan bermakna.
Konteks Bisnis atau Penelitian: Pertimbangkan konteks bisnis atau penelitian Anda. Misalnya, jika Anda sedang melakukan penelitian pasar, referensi yang cocok mungkin adalah produk atau merek yang paling dikenal atau paling banyak digunakan di pasar.
Efeknya pada Regresi: Pahami bahwa pemilihan referensi dapat mempengaruhi koefisien dan interpretasi dalam analisis regresi. Koefisien peubah dummy akan mengukur perbedaan antara kelompok referensi dengan kelompok lainnya.
Perbandingan yang Relevan: Pastikan perbandingan antara kelompok lain dengan kelompok referensi memiliki makna dalam konteks analisis Anda.
Untuk peubah brand, kami memilih Brand HP
Sebagai referensi, karena merupakan kategori dengan jumlah
terbanyak.
data <- data %>%
mutate(`Brand` = relevel(as.factor(data$Brand), ref = "HP"))
str(data$Brand)
## Factor w/ 18 levels "HP","Acer","Alienware",..: 11 1 2 6 1 8 6 6 1 11 ...
## - attr(*, "names")= chr [1:9991] "Lenovo ThinkPad T14 Gen 2" "HP 17" "Acer Predator Triton 300" "ASUS Vivobook 17X" ...
levels(data$Brand)
## [1] "HP" "Acer" "Alienware" "Aorus" "Apple" "ASUS"
## [7] "Chuwi" "Dell" "Fusion5" "Gigabyte" "Lenovo" "LG"
## [13] "Microsoft" "MSI" "Panasonic" "Razer" "Samsung" "Toshiba"
2. Price to Numeric
Price Memiliki karakter $ yang menandakan
satuan USD. Agar dapat dianalisis lebih lanjut, kami
menghapus $ lalu menjadikannya sebagai peubah numerik dan
membaginya dengan \(100\), karena 2
digit dari belakang merupakan cent . Selain
Price (USD) agar memudahkan dalam membaca nilai mata uang,
kami juga membuat peubah tambahan yakni Price (IDR) dengan
mengalikan setiap \(1\)
USD dengan \(15,355.40\)
(Nilai \(1\) USD ke
IDR Sekarang).
data <- data %>%
mutate(`Price (USD)` = as.numeric(gsub("\\$", "", Price)) / 100,
`Price (IDR)` = `Price (USD)` * 15355.40 ) %>%
select(-Price)
kable(head(data)) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE)
| Name | CPU | RAM | GPU | Display | Storage | Brand | Price (USD) | Price (IDR) |
|---|---|---|---|---|---|---|---|---|
| Lenovo ThinkPad T14 Gen 2 | AMD Ryzen 7 5850U | 20GB RAM | AMD Radeon RX Vega 8 (R4000/5000, 15W) | 14.0”, Full HD (1920 x 1080), IPS | 2000GB SSD | Lenovo | 1469.99 | 22572284 |
| HP 17 | Intel Core i5-1335U | 16GB RAM | Intel Iris Xe Graphics G7 (80EU) | 17.3”, Full HD (1920 x 1080), IPS | 1000GB HDD | HP | 1119.00 | 17182693 |
| Acer Predator Triton 300 | Intel Core i7-11800H | 64GB RAM | NVIDIA GeForce RTX 3060 (Laptop, 105W) | 15.6”, Full HD (1920 x 1080), 144 Hz, IPS | 4000GB SSD | Acer | 2049.00 | 31463215 |
| ASUS Vivobook 17X | AMD Ryzen 7 5800H | 40GB RAM | AMD Radeon RX Vega 8 (R4000/5000, 35/45W) | 17.3”, Full HD (1920 x 1080), IPS | 2000GB SSD | ASUS | 969.99 | 14894584 |
| HP 17 | Intel Core i5-1335U | 12GB RAM | Intel Iris Xe Graphics G7 (80EU) | 17.3”, Full HD (1920 x 1080), IPS | 1000GB SSD | HP | 712.99 | 10948247 |
| Dell Vostro 7620 | Intel Core i7-12700H | 24GB RAM | NVIDIA GeForce RTX 3050 (Laptop) | 16.0”, WUXGA (1920 x 1200), IPS | 512GB SSD | Dell | 1579.00 | 24246177 |
a. Sebaran Harga Laptop
install_load('ggridges','hrbrthemes','viridis')
## Warning: package 'ggridges' was built under R version 4.2.3
## NOTE: Either Arial Narrow or Roboto Condensed fonts are required to use these themes.
## Please use hrbrthemes::import_roboto_condensed() to install Roboto Condensed and
## if Arial Narrow is not on your system, please see https://bit.ly/arialnarrow
## Loading required package: viridisLite
ggplot(data, aes(x=`Price (USD)`, y=Brand, fill=Brand)) + geom_density_ridges() +
#COLORING
scale_fill_viridis(alpha = 0.75, #Opacity
begin = 0.1, #Color pallte scale begins
end = 0.9, #Color pallte scale ends
direction = -1, #Flip color scale
discrete = T, #Discrete Value
option = "D") + #Color Palette
theme_modern_rc(axis_title_just = "center", axis_title_size = 12) +
theme(plot.title = element_text(hjust=0.5),legend.position = "none") +
labs(x = "\nHarga (USD)",y = "Brand Laptop\n",
title = "Sebaran Harga Brand Laptop")
## Picking joint bandwidth of 250
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family
## not found in Windows font database
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family
## not found in Windows font database
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family
## not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
summary(data$`Price (USD)`)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 110 810 1236 1487 1799 11812
summary(data$`Price (IDR)`)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1689094 12437720 18979121 22838230 27624365 181371689
Dari sebarannya, terlhiat bahwa mayoritas sebaran berdasarkan brand
nya, menjulur ke kanan. Artinya lebih banyak harga laptop yang lebih
murah daripada yang mahal. Sekitar \(75\%\) laptop harganya dibawah \(1,800\$\) (\(27.6\) jt IDR). Harga laptop
paling murah yakni \(110\$\) atau
sekitar \(1.7\) jt IDR.
Dan Harga laptop paling mahal yakni \(11,812\$\) atau sekitar \(181\) jt IDR.
Contoh Model Linear dengan peubah dummy.
model <- lm(`Price (USD)` ~ `Brand`,data=data)
summary(model)
##
## Call:
## lm(formula = `Price (USD)` ~ Brand, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2707.1 -590.7 -194.7 327.5 10325.9
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1273.32 17.15 74.246 < 2e-16 ***
## BrandAcer 79.01 33.73 2.343 0.019172 *
## BrandAlienware 1107.63 113.54 9.756 < 2e-16 ***
## BrandAorus 2817.81 93.84 30.029 < 2e-16 ***
## BrandApple 842.14 156.58 5.378 7.69e-08 ***
## BrandASUS 212.38 28.87 7.355 2.05e-13 ***
## BrandChuwi -914.32 972.13 -0.941 0.346965
## BrandDell 75.68 36.66 2.064 0.039010 *
## BrandFusion5 -1073.33 972.13 -1.104 0.269574
## BrandGigabyte 1301.88 132.18 9.849 < 2e-16 ***
## BrandLenovo -31.68 30.41 -1.042 0.297602
## BrandLG 249.14 72.39 3.442 0.000581 ***
## BrandMicrosoft 303.93 175.41 1.733 0.083187 .
## BrandMSI 1148.00 35.91 31.968 < 2e-16 ***
## BrandPanasonic 2512.93 486.29 5.168 2.42e-07 ***
## BrandRazer 895.57 270.12 3.315 0.000918 ***
## BrandSamsung -288.01 158.60 -1.816 0.069416 .
## BrandToshiba 715.68 687.50 1.041 0.297908
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 972 on 9973 degrees of freedom
## Multiple R-squared: 0.1777, Adjusted R-squared: 0.1763
## F-statistic: 126.8 on 17 and 9973 DF, p-value: < 2.2e-16
Terlihat bahwa tidak ada Brand HP , karena
HP dijadikan sebagai referensi sebelumnya.
3. RAM to Numeric
Selanjutnya, kami menghapus “GB RAM” pada RAM dan
mengubahnya menjadi numerik agar dapat dianalisis.
data <- data %>%
mutate(`Ram (GB)` = as.numeric(gsub("GB RAM", "", RAM))) %>%
select(-RAM)
kable(head(data)) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE)
| Name | CPU | GPU | Display | Storage | Brand | Price (USD) | Price (IDR) | Ram (GB) |
|---|---|---|---|---|---|---|---|---|
| Lenovo ThinkPad T14 Gen 2 | AMD Ryzen 7 5850U | AMD Radeon RX Vega 8 (R4000/5000, 15W) | 14.0”, Full HD (1920 x 1080), IPS | 2000GB SSD | Lenovo | 1469.99 | 22572284 | 20 |
| HP 17 | Intel Core i5-1335U | Intel Iris Xe Graphics G7 (80EU) | 17.3”, Full HD (1920 x 1080), IPS | 1000GB HDD | HP | 1119.00 | 17182693 | 16 |
| Acer Predator Triton 300 | Intel Core i7-11800H | NVIDIA GeForce RTX 3060 (Laptop, 105W) | 15.6”, Full HD (1920 x 1080), 144 Hz, IPS | 4000GB SSD | Acer | 2049.00 | 31463215 | 64 |
| ASUS Vivobook 17X | AMD Ryzen 7 5800H | AMD Radeon RX Vega 8 (R4000/5000, 35/45W) | 17.3”, Full HD (1920 x 1080), IPS | 2000GB SSD | ASUS | 969.99 | 14894584 | 40 |
| HP 17 | Intel Core i5-1335U | Intel Iris Xe Graphics G7 (80EU) | 17.3”, Full HD (1920 x 1080), IPS | 1000GB SSD | HP | 712.99 | 10948247 | 12 |
| Dell Vostro 7620 | Intel Core i7-12700H | NVIDIA GeForce RTX 3050 (Laptop) | 16.0”, WUXGA (1920 x 1200), IPS | 512GB SSD | Dell | 1579.00 | 24246177 | 24 |
a. Sebaran RAM Laptop
# Membuat bar chart persentase
ggplot(data = data %>% count(`Ram (GB)`) %>% # banyaknya laptop brand x
mutate(perc = round(n / sum(n) * 100)), #buat persentase,
aes(x = reorder(`Ram (GB)`, -n), y = perc)) +
geom_bar(stat = "identity", fill='#2D99AE') +
geom_text(aes(label = prettyNum(n,big.mark = ",")
), vjust = -0.5, size = 7, col="orange4",
fontface = "bold") + # Tambahkan label
labs(x = "RAM (GB)", y = "Persentase (%)",
title = "Sebaran RAM Laptop") +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
scale_y_continuous(labels = scales::percent_format(scale = 1)) +
theme_minimal() + # Tambahkan tema minimal
theme(axis.text.x = element_text(angle = 45, hjust = 1,
margin = margin(b = 1)),
axis.text.y = element_text(vjust = .5, face = "bold",
margin = margin(l = 20)),
plot.title = element_text(hjust = 0.5, vjust =0.5,
face = "bold", margin = margin(b = 50)),
text = element_text(size = 30),
plot.subtitle = element_text(hjust = 0.5)
)
Terlihat bahwa RAM laptop terbanyak memiliki kapasitas
\(16\)GB, sedangkan yang terkecil
adalah \(0\)GB.
Ini memang agak aneh, tapi setelah kami cek kembali, ternyata memang
ada laptop dengan RAM \(0\)GB.
4. Storage to Numeric
Setelah itu kami akan mengubah Storage Menjadi numerik
dengan cara memisahkan “SSD” & “HDD” ke kolom
Storage Type.
storage <- data %>%
mutate(`Storage (GB)` = as.numeric(str_extract(Storage, "\\d+")),
`Storage Type` = str_extract(Storage, "(SSD|HDD)")) %>%
select(`Storage (GB)`,`Storage Type`)
kable(head(storage)) %>%
kable_styling(bootstrap_options = "striped", full_width = FALSE)
| Storage (GB) | Storage Type |
|---|---|
| 2000 | SSD |
| 1000 | HDD |
| 4000 | SSD |
| 2000 | SSD |
| 1000 | SSD |
| 512 | SSD |
a. Sebaran Storage Laptop
Pie Chart SSD & HDD
plot.p(dt = storage$`Storage Type`, title = "Porporsi SSD dan HDD")
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ tibble 3.2.1 ✔ purrr 1.0.2
## ✔ tidyr 1.2.1 ✔ forcats 1.0.0
## ✔ readr 2.1.3
## Warning: package 'tibble' was built under R version 4.2.3
## Warning: package 'purrr' was built under R version 4.2.3
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ kableExtra::group_rows() masks dplyr::group_rows()
## ✖ dplyr::lag() masks stats::lag()
##
## Attaching package: 'scales'
##
##
## The following object is masked from 'package:purrr':
##
## discard
##
##
## The following object is masked from 'package:readr':
##
## col_factor
##
##
## The following object is masked from 'package:viridis':
##
## viridis_pal
## Warning: The `guide` argument in `scale_*()` cannot be `FALSE`. This was deprecated in
## ggplot2 3.3.4.
## ℹ Please use "none" instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Terlihat bahwa \(94.1\%\) laptop
memiliki tipe peyimpanan SSD. Sunggu perbedaan yang sangat
jauh.
Sebaran SSD
# Membuat bar chart persentase
ggplot(data = storage %>%
filter(grepl("SSD", `Storage Type`, ignore.case = TRUE))
%>% count(`Storage (GB)`) %>% # banyaknya laptop brand x
mutate(perc = round(n / sum(n) * 100)), #buat persentase,
aes(x = reorder(`Storage (GB)`, -n), y = perc)) +
geom_bar(stat = "identity", fill='#2D99AE') +
geom_text(aes(label = prettyNum(n,big.mark = ",")
), vjust = -0.5, size = 7, col="orange4",
fontface = "bold") + # Tambahkan label
labs(x = "SSD (GB)", y = "Persentase (%)",
title = "Sebaran SSD Laptop") +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
scale_y_continuous(labels = scales::percent_format(scale = 1)) +
theme_minimal() + # Tambahkan tema minimal
theme(axis.text.x = element_text(angle = 45, hjust = 1,
margin = margin(b = 1)),
axis.text.y = element_text(vjust = .5, face = "bold",
margin = margin(l = 20)),
plot.title = element_text(hjust = 0.5, vjust =0.5,
face = "bold", margin = margin(b = 50)),
text = element_text(size = 30),
plot.subtitle = element_text(hjust = 0.5)
)
Laptop dengan total penyimpanan \(1000\) GigaByte ( \(1\) TerraByte) SSD merupakan
total penyimpanan yang paling banyak dimiliki oleh laptop.
kable(data[data$`Storage` == "16GB SSD", ]) %>%
kable_styling(bootstrap_options = "striped", full_width = FALSE)
| Name | CPU | GPU | Display | Storage | Brand | Price (USD) | Price (IDR) | Ram (GB) |
|---|---|---|---|---|---|---|---|---|
| HP Chromebook 11 G5 EE | Intel Celeron N3060 | Intel HD Graphics 400 (Braswell) | 11.6”, HD (1280 x 800), TN | 16GB SSD | HP | 195.00 | 2994303 | 2 |
| Acer Chromebook 11 (CB3-131) | Intel Celeron N2840 | Intel HD Graphics (Bay Trail) | 11.6”, HD (1366 x 768), IPS | 16GB SSD | Acer | 499.99 | 7677546 | 4 |
| Dell Chromebook 11 3181 | Intel Celeron N3060 | Intel HD Graphics 400 (Braswell) | 11.6”, HD (1366 x 768), TN | 16GB SSD | Dell | 287.88 | 4420513 | 4 |
| Samsung Chromebook 4 | Intel Celeron N4020 | Intel UHD Graphics 600 | 11.6”, HD (1366 x 768), TN | 16GB SSD | Samsung | 164.97 | 2533180 | 4 |
| Acer Chromebook 14 (CB3-431) | Intel Celeron N3060 | Intel HD Graphics 405 (Braswell) | 14.0”, HD (1366 x 768), IPS | 16GB SSD | Acer | 199.00 | 3055725 | 4 |
| HP Chromebook 11 G6 EE | Intel Celeron N3350 | Intel HD Graphics 500 (Apollo Lake) | 11.6”, HD (1366 x 768), TN | 16GB SSD | HP | 294.02 | 4514795 | 4 |
| HP Chromebook 11 G5 | Intel Celeron N3050 | Intel HD Graphics 400 (Braswell) | 11.6”, HD (1366 x 768), IPS | 16GB SSD | HP | 161.00 | 2472219 | 2 |
| HP Chromebook 11 (11-v000nr) | Intel Celeron N3060 | Intel HD Graphics 400 (Braswell) | 11.6”, HD (1366 x 768), TN | 16GB SSD | HP | 147.50 | 2264922 | 2 |
| ASUS TUF Gaming A17 | AMD Ryzen 9 7940HS | NVIDIA GeForce RTX 4060 (Laptop, 140W) | 17.3”, Full HD (1920 x 1080), 144 Hz, IPS | 16GB SSD | ASUS | 4389.00 | 67394851 | 64 |
Memang agak mengejutkan, bahwa ternyata ada laptop yang hanya
memiliki penyimpanan \(16\) GB
SSD saja. Tidak ada keterangan Bahwa laptop tersebut
memiliki penyimpanan Hybrid dengan tambahan HDD.
Namun kami yakin laptop tersebut pasti memiliki penyimpanan
HDD tambahan. Karena terlihat bahwa ada laptop yang
memiliki Spesifikasi gahar dengan harga yang mahal pula, namun Storage
hanya \(16\) GB SSD saja.
Laptop tersebut adalah ASUS TUF Gaming A17 dengan harga
\(67.4\) jt IDR.
Tapi karena keterbatasan informasi dari data hasil scraping. Kami akan melanjutkan dengan data ini dahulu saja. Jika memungkinkan untuk scraping ulang, maka akan kami scraping ulang.
Sebaran HDD
# Membuat bar chart persentase
ggplot(data = storage %>%
filter(grepl("HDD", `Storage Type`, ignore.case = TRUE))
%>% count(`Storage (GB)`) %>% # banyaknya laptop brand x
mutate(perc = round(n / sum(n) * 100)), #buat persentase,
aes(x = reorder(`Storage (GB)`, -n), y = perc)) +
geom_bar(stat = "identity", fill='#2D99AE') +
geom_text(aes(label = prettyNum(n,big.mark = ",")
), vjust = -0.5, size = 7, col="orange4",
fontface = "bold") + # Tambahkan label
labs(x = "HDD (GB)", y = "Persentase (%)",
title = "Sebaran HDD Laptop") +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
scale_y_continuous(labels = scales::percent_format(scale = 1)) +
theme_minimal() + # Tambahkan tema minimal
theme(axis.text.x = element_text(angle = 45, hjust = 1,
margin = margin(b = 1)),
axis.text.y = element_text(vjust = .5, face = "bold",
margin = margin(l = 20)),
plot.title = element_text(hjust = 0.5, vjust =0.5,
face = "bold", margin = margin(b = 50)),
text = element_text(size = 30),
plot.subtitle = element_text(hjust = 0.5)
)
Kebanyakan laptop dengan tipe penyimpanan HDD memiliki
total penyimpanan \(1\) TerraByte.
b. Scoring Storage
Scoring merupakan salah satu metode untuk mengurangi adanya
autokorelasi pada analsis regresi. Untuk mengurangi adanya
autokorelasi pada 2 peubah diatas yakni
Storage (GB) dengan Storage Type, Maka kami
melakukan scoring dengan mempertimbangkan hal berikut:
Dalam hal kinerja,
SSDdapat diperkirakan sekitar \(5\) hingga \(10\) kali lebih cepat daripadaHDDdalam hal kecepatan baca/tulis data.Dalam hal harga,
SSDdapat diperkirakan sekitar \(2\) hingga \(5\) kali lebih mahal per gigabyte dibandingkanHDD.Dalam hal kapasitas,
HDDdapat memiliki kapasitas yang lebih besar hingga \(2\) hingga \(4\) kali lipat dariSSDdalam harga yang sama.
Pemberian bobot yang lebih merata dengan menggunakan
nilai tengah seperti \(\frac{7.5}{3.5}\) untuk SSD
dan \(\frac{3.5}{7.5}\) untuk
HDD adalah pendekatan yang lebih seimbang
dan simetris. Ini memberikan penekanan yang relatif
setara pada kedua faktor, baik kinerja (SSD) maupun kapasitas (HDD).
Pendekatan ini menghindari pemberian bobot yang sangat ekstrem dan cenderung memberikan penilaian yang lebih adil terhadap kedua faktor tersebut.
storage <- storage %>%
mutate(
`Storage Score` = ifelse(`Storage Type` == "SSD", `Storage (GB)` * (7.5/3.5),
`Storage (GB)` * (3.5/7.5))
)
kable(head(storage)) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE)
| Storage (GB) | Storage Type | Storage Score |
|---|---|---|
| 2000 | SSD | 4285.7143 |
| 1000 | HDD | 466.6667 |
| 4000 | SSD | 8571.4286 |
| 2000 | SSD | 4285.7143 |
| 1000 | SSD | 2142.8571 |
| 512 | SSD | 1097.1429 |
c. Merge Data
data <- data %>%
mutate(`Storage Score` = storage$`Storage Score`)
kable(head(data)) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE)
| Name | CPU | GPU | Display | Storage | Brand | Price (USD) | Price (IDR) | Ram (GB) | Storage Score |
|---|---|---|---|---|---|---|---|---|---|
| Lenovo ThinkPad T14 Gen 2 | AMD Ryzen 7 5850U | AMD Radeon RX Vega 8 (R4000/5000, 15W) | 14.0”, Full HD (1920 x 1080), IPS | 2000GB SSD | Lenovo | 1469.99 | 22572284 | 20 | 4285.7143 |
| HP 17 | Intel Core i5-1335U | Intel Iris Xe Graphics G7 (80EU) | 17.3”, Full HD (1920 x 1080), IPS | 1000GB HDD | HP | 1119.00 | 17182693 | 16 | 466.6667 |
| Acer Predator Triton 300 | Intel Core i7-11800H | NVIDIA GeForce RTX 3060 (Laptop, 105W) | 15.6”, Full HD (1920 x 1080), 144 Hz, IPS | 4000GB SSD | Acer | 2049.00 | 31463215 | 64 | 8571.4286 |
| ASUS Vivobook 17X | AMD Ryzen 7 5800H | AMD Radeon RX Vega 8 (R4000/5000, 35/45W) | 17.3”, Full HD (1920 x 1080), IPS | 2000GB SSD | ASUS | 969.99 | 14894584 | 40 | 4285.7143 |
| HP 17 | Intel Core i5-1335U | Intel Iris Xe Graphics G7 (80EU) | 17.3”, Full HD (1920 x 1080), IPS | 1000GB SSD | HP | 712.99 | 10948247 | 12 | 2142.8571 |
| Dell Vostro 7620 | Intel Core i7-12700H | NVIDIA GeForce RTX 3050 (Laptop) | 16.0”, WUXGA (1920 x 1200), IPS | 512GB SSD | Dell | 1579.00 | 24246177 | 24 | 1097.1429 |
5. Display Classification & Scoring
Setelah Storage, kita lanjut ke peubah selanjutnya yakni
Display. Ada beberapa komponen dalam display, terutama pada
data yang kami miliki ada 4 komponen, Yakni Screen Size,
Resolution, Refresh Rate, dan
Screen Type. Kami melakukan pemisahan keempat komponen
tersebut menjadi 4 kolom yang berbeda.
a. Refresh Rate
Ada baiknya kita mengetahui bahwa:
Refresh rate mengukur berapa kali layar dapat menggambar atau memperbarui gambar per detik, diukur dalam
Hertz (Hz).Refresh rate yang lebih tinggi dapat menghasilkan tampilan yang lebih halus, yang bermanfaat dalam gaming dan aplikasi bergerak cepat.
Sebagian besar laptop memiliki refresh rate 60Hz, tetapi beberapa laptop gaming mungkin memiliki refresh rate 120Hz atau bahkan lebih tinggi.
Karena kami melihat banyak sekali laptop tanpa refresh rate. Maka kami memutuskan untuk menambahkannya dengan refresh rate minimal pada laptop.
Mengutip dari chat gpt bahwa nilai
minimal refresh rate (Hz) pada layar laptop
umumnya adalah 60Hz. Layar dengan refresh
rate 60Hz sudah cukup umum digunakan dan memberikan
tampilan yang lancar untuk sebagian besar tugas komputasi sehari-hari.
Beberapa laptop gaming dan monitor mungkin memiliki refresh rate yang
lebih tinggi, seperti 120Hz, 144Hz, atau
bahkan lebih tinggi, yang dirancang untuk memberikan pengalaman gaming
yang lebih halus.
Refresh rate 30Hz mungkin terlalu
rendah dan dapat menyebabkan tampilan layar terlihat kurang
responsif dan cenderung “berkedip” dalam beberapa kasus. Oleh karena
itu, kami memutuskan untuk memberikan nilai 60Hz kepada
laptop yang tidak memiliki keterangan refresh rate.
display <- data %>%
separate(Display, into = c("Screen Size (Inch)", "Resolution",
"Screen Type","Refresh Rate (Hz)" ),
sep = ", ", remove = FALSE) %>%
mutate(
# Menghapus karakter " dan mengubah menjadi numerik
`Screen Size (Inch)` = as.numeric(gsub("[^0-9.]", "", `Screen Size (Inch)`)),
#Tukar Kolom jika ada hz
temp = `Refresh Rate (Hz)`,
#Ubah hz jadi numerik
`Refresh Rate (Hz)` = ifelse(grepl("Hz", `Screen Type`),
as.numeric(gsub("[^0-9.]", "", `Screen Type`)),
#Jika tidak ada, beri nilai minimal hz laptop yakni 60 hz
60),
`Screen Type` = ifelse(grepl("Hz", `Screen Type`), temp, `Screen Type`)
) %>%
select(`Screen Size (Inch)`, Resolution, `Screen Type`, `Refresh Rate (Hz)`)
## Warning: Expected 4 pieces. Missing pieces filled with `NA` in 6794 rows [1, 2,
## 4, 5, 6, 9, 10, 11, 12, 13, 16, 17, 21, 22, 23, 26, 27, 28, 29, 30, ...].
kable(head(display)) %>%
kable_styling(bootstrap_options = "striped", full_width = FALSE)
| Screen Size (Inch) | Resolution | Screen Type | Refresh Rate (Hz) |
|---|---|---|---|
| 14.0 | Full HD (1920 x 1080) | IPS | 60 |
| 17.3 | Full HD (1920 x 1080) | IPS | 60 |
| 15.6 | Full HD (1920 x 1080) | IPS | 144 |
| 17.3 | Full HD (1920 x 1080) | IPS | 60 |
| 17.3 | Full HD (1920 x 1080) | IPS | 60 |
| 16.0 | WUXGA (1920 x 1200) | IPS | 60 |
Cek NA
cat(" Jumlah Screen Size NA :", sum(is.na(display$`Screen Size (Inch)`)), "\n",
"Jumlah Resolution NA :", sum(is.na(display$Resolution)), "\n",
"Jumlah Screen Type NA :", sum(is.na(display$`Screen Type`)), "\n",
"Jumlah Refresh Rate NA :", sum(is.na(display$`Refresh Rate (Hz)`)), "\n"
)
## Jumlah Screen Size NA : 0
## Jumlah Resolution NA : 0
## Jumlah Screen Type NA : 27
## Jumlah Refresh Rate NA : 0
na.idx <- which(is.na(display[,3]), arr.ind = TRUE)
kable(data[ unique(na.idx[, 1]), unique(na.idx[, 2]) +3 ]) %>%
kable_styling(bootstrap_options = "striped", full_width = FALSE)
| Display |
|---|
| 14.2”, Liquid Retina (3024 x 1964), 120 Hz |
| 16.2”, Liquid Retina (3456 x 2234), 120 Hz |
| 13.5”, PixelSense (2256 x 1504) |
| 16.2”, Liquid Retina (3456 x 2234), 120 Hz |
| 16.2”, Liquid Retina (3456 x 2234), 120 Hz |
| 14.2”, Liquid Retina (3024 x 1964), 120 Hz |
| 15.6”, Full HD (1920 x 1080) |
| 14.2”, Liquid Retina (3024 x 1964), 120 Hz |
| 14.2”, Liquid Retina (3024 x 1964), 120 Hz |
| 14.2”, Liquid Retina (3024 x 1964), 120 Hz |
| 13.5”, PixelSense (2256 x 1504) |
| 13.5”, PixelSense (2256 x 1504) |
| 14.2”, Liquid Retina (3024 x 1964), 120 Hz |
| 16.2”, Liquid Retina (3456 x 2234), 120 Hz |
| 16.2”, Liquid Retina (3456 x 2234), 120 Hz |
| 16.2”, Liquid Retina (3456 x 2234), 120 Hz |
| 13.5”, PixelSense (2256 x 1504) |
| 13.5”, PixelSense (2256 x 1504) |
| 15.6”, Full HD (1920 x 1080) |
| 14.2”, Liquid Retina (3024 x 1964), 120 Hz |
| 13.5”, PixelSense (2256 x 1504) |
| 13.5”, PixelSense (2256 x 1504) |
| 16.2”, Liquid Retina (3456 x 2234), 120 Hz |
| 15.6”, Full HD (1920 x 1080) |
| 14.2”, Liquid Retina (3024 x 1964), 120 Hz |
| 14.2”, Liquid Retina (3024 x 1964), 120 Hz |
| 16.2”, Liquid Retina (3456 x 2234), 120 Hz |
b.1 Tipe Layar
Penting untuk mengetahui bahwa:
Tipe layar mengacu pada teknologi yang digunakan dalam pembuatan layar.
Beberapa tipe layar umum meliputi:
IPS (In-Plane Switching): Layar jenis ini dikenal dengan sudut pandang yang luas dan reproduksi warna yang baik.
OLED (Organic Light-Emitting Diode): OLED menghasilkan warna yang kaya dan kontras tinggi.
LCD (Liquid Crystal Display): Layar LCD adalah jenis yang umum dan cenderung lebih terjangkau.
TN (Twisted Nematic): Biasanya digunakan dalam layar murah dan memiliki sudut pandang yang lebih terbatas.
Tipe layar dapat mempengaruhi kualitas tampilan, reproduksi warna, dan sudut pandang.
Seperti yang kita lihat pada ###Cek NA, Yang
NA Hanya tersisa pada Screen Type saja. Karena
setiap layar pasti memiliki tipe nya oleh karena itu kami menanyakan
kepada chat gpt “Apa tipe layar minimal pada
laptop?” Berikut ulasannnya :
Tipe layar minimal laptop adalah layar
LCD (Liquid Crystal Display). Layar LCD adalah teknologi layar
yang paling umum digunakan dalam laptop dan perangkat komputer lainnya.
LCD menggunakan kristal cair yang berada di antara dua lapisan kaca yang
kemudian dikendalikan untuk mengatur cahaya dan menghasilkan gambar.
Dengan demikian kami memutuskan untuk menambahkan Tipe LCD ke kolom
Screen Type yang NA
display <- display %>%
mutate(`Screen Type` = ifelse(is.na(`Screen Type`), "LCD", `Screen Type`))
kable(
display %>%
group_by(`Screen Type`) %>%
summarise(Total = n())
) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE)
| Screen Type | Total |
|---|---|
| IPS | 7944 |
| LCD | 27 |
| OLED | 338 |
| TN | 1682 |
b.2 Screen Type Value Number
Setelah melihat semua tipe layar yang ada, kami ingin mengubah tipe
layar tersebut menjadi numerik berdasarkan kualitas nilai mereka. Kami
meminta bantuan chat gpt untuk memberikan nilai tersebut.
Sebelum itu penting untuk mengetahui kualitas tipe layar yang ada,
sebagai berikut:
OLED (Organic Light-Emitting Diode):
OLED memiliki kualitas gambar yang luar biasa dengan kontras yang sangat tinggi, warna yang tajam, dan sudut pandang yang luas.
Reproduksi warna pada layar OLED sangat akurat dan hidup.
Tidak ada pencahayaan latar belakang, sehingga hitam murni dan kecerahan yang luar biasa.
Biasanya digunakan dalam TV premium dan beberapa monitor kelas atas.
IPS (In-Plane Switching):
IPS menawarkan reproduksi warna yang sangat baik dan sudut pandang yang luas.
Kontras yang baik dan gambar yang tajam, meskipun tidak sebaik OLED.
Digunakan dalam monitor profesional, laptop, dan beberapa TV.
LCD (Liquid Crystal Display):
LCD dengan panel IPS atau VA dapat memberikan kualitas gambar yang baik dengan harga yang lebih terjangkau.
Kualitas gambar bisa bervariasi tergantung pada jenis panel LCD.
Digunakan dalam berbagai perangkat, termasuk monitor, laptop, dan TV.
TN (Twisted Nematic):
TN memiliki waktu respon yang sangat cepat, cocok untuk permainan.
Namun, sudut pandang yang terbatas dan reproduksi warna yang kurang akurat.
Digunakan dalam monitor gaming yang terjangkau.
Sehingga jika diberi nilai akan menjadi:
OLED (Organic Light-Emitting Diode): 9
- OLED memiliki kualitas gambar terbaik dengan kontras tinggi, warna hidup, dan sudut pandang yang luas. Oleh karena itu, kita memberikan nilai tertinggi.
IPS (In-Plane Switching): 7
- IPS menawarkan kualitas gambar yang sangat baik dan sudut pandang yang luas, meskipun tidak sebaik OLED. Tetapi nilai ini tetap tinggi karena IPS masih merupakan pilihan yang sangat baik.
LCD (Liquid Crystal Display): 5
- LCD dengan panel IPS atau VA dapat memberikan kualitas gambar yang baik dengan harga yang lebih terjangkau. Nilai ini mencerminkan kualitas yang baik tetapi tidak sebaik OLED atau IPS.
TN (Twisted Nematic): 3
- TN memiliki waktu respon yang cepat, tetapi sudut pandang yang terbatas dan reproduksi warna yang kurang akurat. Oleh karena itu, nilai ini lebih rendah.
display <- display %>%
mutate(
`Screen Type` = case_when(
`Screen Type` == "OLED" ~ "9", `Screen Type` == "IPS" ~ "7",
`Screen Type` == "LCD" ~ "5", `Screen Type` == "TN" ~ "3",
TRUE ~ `Screen Type`
), `Screen Type` = as.numeric(`Screen Type`)
)
kable(head(display)) %>%
kable_styling(bootstrap_options = "striped", full_width = FALSE)
| Screen Size (Inch) | Resolution | Screen Type | Refresh Rate (Hz) |
|---|---|---|---|
| 14.0 | Full HD (1920 x 1080) | 7 | 60 |
| 17.3 | Full HD (1920 x 1080) | 7 | 60 |
| 15.6 | Full HD (1920 x 1080) | 7 | 144 |
| 17.3 | Full HD (1920 x 1080) | 7 | 60 |
| 17.3 | Full HD (1920 x 1080) | 7 | 60 |
| 16.0 | WUXGA (1920 x 1200) | 7 | 60 |
c.1 Resolusi layar
Penting untuk mengetahui apa itu resolusi layar.
Resolusi adalah jumlah piksel yang dapat ditampilkan pada layar.
Resolusi umumnya diukur dalam format “lebar x tinggi” (misalnya, 1920 x 1080), yang menunjukkan jumlah piksel horizontal dan vertikal yang terdapat pada layar.
Semakin tinggi resolusi, semakin tajam dan detail tampilan gambar dan teksnya.
Karena kami lihat banyak sekali jenis resolusi layar yang punya nama, jadi kami memutuskan untuk melihat semua jenis nya.
kable(
display %>%
group_by(`Resolution`) %>%
summarise(Total = n())
) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE)
| Resolution | Total |
|---|---|
| QHD (2560 x 1440) | 63 |
| (2496 x 1664) | 3 |
| (2560 x 1664) | 5 |
| 2.2K (2240 x 1400) | 25 |
| 2.5K (2560 x 1440) | 1 |
| 2.8K (2880 x 1620) | 7 |
| 2.8K (2880 x 1800) | 85 |
| 2K (2256 x 1504) | 8 |
| 3.2K (3200 x 2000) | 12 |
| 3.5K (3456 x 2160) | 8 |
| 3K (2880 x 1800) | 5 |
| 3K (3000 x 2000) | 7 |
| 3K (3072 x 1920) | 48 |
| 3K (3240 x 2160) | 3 |
| 3K2K (3000 x 2000) | 1 |
| 3К (2736 x 1824) | 4 |
| 4K UHD (3840 x 2160) | 110 |
| 4K UHD (3840 x 2400) | 4 |
| 4K UHD+ (3840 x 2400) | 4 |
| FHD (1920 x 1080) | 131 |
| FHD (1920 x 1200) | 5 |
| FHD (1920x1080) | 2 |
| FHD+ (1920 x 1200) | 158 |
| FHD+ (1920 x 1280) | 4 |
| FHD+ (2160 x 1440) | 2 |
| Full HD (1920 x 1080) | 5926 |
| HD (1280 x 800) | 1 |
| HD (1366 x 768) | 1027 |
| HD+ (1366 x 912) | 2 |
| HD+ (1600 x 900) | 349 |
| Liquid Retina (2880 x 1864) | 7 |
| Liquid Retina (3024 x 1964) | 9 |
| Liquid Retina (3456 x 2234) | 8 |
| PixelSense (1536 x 1024) | 3 |
| PixelSense (2256 x 1504) | 7 |
| PixelSense (2880 x 1920) | 2 |
| PixelSense Flow (2400 x 1600) | 1 |
| QHD (2560 x 1440) | 259 |
| QHD (2560 x 1600) | 94 |
| QHD+ (2560 x 1600) | 119 |
| QHD+ (3000 x 2000) | 2 |
| QHD+ (3200 x 1800) | 2 |
| UHD+ (3840 x 2400) | 30 |
| WQHD (2160 x 1350) | 3 |
| WQHD (2560 x 1440) | 139 |
| WQHD+ (2880 x 1800) | 1 |
| WQUXGA (3840 x 2400) | 75 |
| WQUXGA (3840 x 2400) | 36 |
| WQXGA (2560 x 1600) | 593 |
| WQXGA (2560 x 1600) | 8 |
| WUXGA (1920 x 1200) | 570 |
| WUXGA (1920 x 1280) | 2 |
| WUXGA+ (1920 x 1280) | 11 |
Terlihat bahwa semua namanya adalah seberapa besar kualitas
resolusinya, Kecuali PixelSense.
PixelSense adalah tipe layar yang digunakan pada perangkat Microsoft Surface. Ini adalah layar sentuh yang sangat responsif dan mendukung penggunaan pena digital. Layar ini dirancang untuk produktivitas dan kreativitas.
Karena perbedaan inilah, kami memutuskan untuk memberikan bobot pada tipe layar PixelSense, dengan PixelSense \((1.125)\) dan PixelSense Flow \((1.25)\).
“PixelSense” dan “PixelSense Flow” memiliki karakteristik yang berbeda dalam hal kualitas gambar atau kemampuan layarnya. Sehingga memberikan bobot yang sedikit lebih tinggi kepada “PixelSense Flow” \((1.25)\) cukup mencerminkan perbedaan ini.
c.2 Multiply Resolution
Setelah eksplorasi tentang macam-macam tipe layar dan memberi bobot pada mereka, kami akan mengalikan resolusi tersebut. Sehingga resmi menjadi peubah numerik.
display <- display %>%
mutate( # Mencari semua kemungkinan pasangan angka dalam kolom "Resolution"
Resolution_Num = str_extract_all(Resolution, "\\d{2,}"),
# Mengambil pasangan angka yang memiliki dua angka di dalamnya
Resolution_Num = sapply(Resolution_Num,
function(x) if (length(x) == 2) paste(x, collapse = "x") else NA)
) %>% # Pisahkan "Width" dan "Height" dari "Resolution_Num"
separate(Resolution_Num, into = c("Width", "Height"), sep = "x",
convert = TRUE, remove = FALSE) %>%
# Berikan bobot jika ada kata PixelSense dalam kolom resolusi
mutate(
Resolution = ifelse(grepl("PixelSense", Resolution),
Width * Height * 1.125,
Width * Height)
) %>% select(-Resolution_Num, -Width, -Height)
kable(head(display)) %>% kable_styling(bootstrap_options = "striped", full_width = FALSE)
| Screen Size (Inch) | Resolution | Screen Type | Refresh Rate (Hz) |
|---|---|---|---|
| 14.0 | 2073600 | 7 | 60 |
| 17.3 | 2073600 | 7 | 60 |
| 15.6 | 2073600 | 7 | 144 |
| 17.3 | 2073600 | 7 | 60 |
| 17.3 | 2073600 | 7 | 60 |
| 16.0 | 2304000 | 7 | 60 |
d. Display Score
Akhirnya setelah mengubah keempat peubah display diatas menjadi numerik, kami akan menghitung total score yang dimiliki. Scoring merupakan salah satu metode untuk mengurangi adanya autokorelasi pada analsis regresi. Adapun formula untuk display score:
\[ \frac{\mathbf{Resolution\times Screen.Type}} {\mathbf{Screen.Size}} + \mathbf{Refresh.Rate} \]
Resolution dan Screen Type merupakan hal
yang berfokus pada kualitas visual dan bisa dipadukan satu sama lain.
Akan tetapi hal itu akan sia-sia jika Screen Size nya
kecil. Bayangkan anda memiliki resolusi dan tipe layar yang tinggi,
namun ukuran layar anda kecil. Apa yang ingin anda liat? Apakah anda
menatap layar sangat dengat dengan mata anda? Tentu saja tidak!
Berbeda dengan Refresh Rate yang berfokus pada kecepatan
layar. Baik kualitas visual maupun ukuran tidak terlalu mempengaruhi
nilai nya. Sehingga kaidah score nya dibuat terpisah dengan
penjumlahan.
display <- display %>%
mutate_all(rescale, to = c(10, 100)) %>%
mutate(`Display Score` = ((Resolution * `Screen Type`) /
`Screen Size (Inch)`) + `Refresh Rate (Hz)`)
kable(head(display)) %>%
kable_styling(bootstrap_options = "striped", full_width = FALSE)
| Screen Size (Inch) | Resolution | Screen Type | Refresh Rate (Hz) | Display Score |
|---|---|---|---|---|
| 67.27273 | 21.53125 | 70 | 10 | 32.40414 |
| 94.27273 | 21.53125 | 70 | 10 | 25.98752 |
| 80.36364 | 21.53125 | 70 | 28 | 46.75460 |
| 94.27273 | 21.53125 | 70 | 10 | 25.98752 |
| 94.27273 | 21.53125 | 70 | 10 | 25.98752 |
| 83.63636 | 24.06250 | 70 | 10 | 30.13927 |
Merge Data
data <- data %>% bind_cols(`Display Score` = display$`Display Score`)
kable(head(data)) %>%
kable_styling(bootstrap_options = "striped", full_width = FALSE)
| Name | CPU | GPU | Display | Storage | Brand | Price (USD) | Price (IDR) | Ram (GB) | Storage Score | Display Score |
|---|---|---|---|---|---|---|---|---|---|---|
| Lenovo ThinkPad T14 Gen 2 | AMD Ryzen 7 5850U | AMD Radeon RX Vega 8 (R4000/5000, 15W) | 14.0”, Full HD (1920 x 1080), IPS | 2000GB SSD | Lenovo | 1469.99 | 22572284 | 20 | 4285.7143 | 32.40414 |
| HP 17 | Intel Core i5-1335U | Intel Iris Xe Graphics G7 (80EU) | 17.3”, Full HD (1920 x 1080), IPS | 1000GB HDD | HP | 1119.00 | 17182693 | 16 | 466.6667 | 25.98752 |
| Acer Predator Triton 300 | Intel Core i7-11800H | NVIDIA GeForce RTX 3060 (Laptop, 105W) | 15.6”, Full HD (1920 x 1080), 144 Hz, IPS | 4000GB SSD | Acer | 2049.00 | 31463215 | 64 | 8571.4286 | 46.75460 |
| ASUS Vivobook 17X | AMD Ryzen 7 5800H | AMD Radeon RX Vega 8 (R4000/5000, 35/45W) | 17.3”, Full HD (1920 x 1080), IPS | 2000GB SSD | ASUS | 969.99 | 14894584 | 40 | 4285.7143 | 25.98752 |
| HP 17 | Intel Core i5-1335U | Intel Iris Xe Graphics G7 (80EU) | 17.3”, Full HD (1920 x 1080), IPS | 1000GB SSD | HP | 712.99 | 10948247 | 12 | 2142.8571 | 25.98752 |
| Dell Vostro 7620 | Intel Core i7-12700H | NVIDIA GeForce RTX 3050 (Laptop) | 16.0”, WUXGA (1920 x 1200), IPS | 512GB SSD | Dell | 1579.00 | 24246177 | 24 | 1097.1429 | 30.13927 |
Referensi
Theme : Rmd Themes
Hide Code : Hide Code In RMD